查看原文
其他

Git 2.25.0发布,不用再clone整个仓库了

点击上方IT平头哥联盟”,选择“置顶或者星标”

你的关注意义重大!

来源:开源中国

Git 2.25.0 发布了,项目贡献者 Taylor Blau 介绍了此版本带来的一些特性上的亮点,包括部分克隆(partial clone)与稀疏检出(sparse checkout)。
partial clone,部分克隆
一般来说,Git clone 时副本会复制仓库的所有数据,包括历史记录中每个文件的每个版本,对于非常大的存储库,如果只需要文件的一部分,那会无形中增加网络传输和本地存储的成本。在过去的几个版本中,Git 拥有了执行部分克隆的能力,这意味着它现在可以克隆并使用存储库部分内容而无需拥有所有内容。
目前该特性还处于实验阶段。
具体来讲,部分克隆需要客户端做两件事:它必须能够告诉服务器它只需要存储库中的哪些对象,同时还必须能够不与缺少完整对象集的本地存储库产生冲突。另一方面,服务器则必须能够解释客户端的请求,仅服务于某些对象,并能够生成适当的响应。
这其中必要的逻辑是需要 Git 在收到服务器的响应后能够跳过检出存储库,因为一旦检出,那么它就会发现 clone 的对象不完整,并尝试向服务器请求。实际上这一功能由另一个新特性实现:sparse checkout,稀疏检出。
sparse checkout,稀疏检出
稀疏检出实际上是一个类似于 .gitignore 的文件路径模式匹配列表,告诉 Git 在检出存储库时可以跳过哪些对象,它的工作对象是副本内容,而不像 .gitignore 是索引。
稀疏检出有一个缺点就是很难指定,比如下边是为了跳过检出深度大于等于 2 的文件:
$ git clone --filter=blob:none --no-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <<EOF
/*
!/*
EOF

$ git config core.sparseCheckout 1
$ git checkout .
首先,指定 --filter = blob:none 要求服务器避免向我们发送 blob,随后使用 --no-checkout 告诉 Git 在检出存储库时跳过 /your/repository/here 这部分,但它实际上还要依赖于 .git/info/sparse-checkout中的模式匹配。
Git 2.25 中,通过引入新的 git sparse-checkout 命令,让这一操作更加简便。以下是与上边相同功能的 demo:
$ git clone --filter=blob:none --sparse /your/repository/here repo
git sparse-checkout命令使用户可以尽可能轻松地进行部分克隆和稀疏检出,无需将复杂的.gitignore模式匹配编写到.git/info/sparse-checkoutgit sparse-checkout会直接处理。
git sparse-checkout 可以做四件事:设置(set)要检出的路径列表、打印(list)当前列表以及完全启用(enable)或禁用(disable)稀疏检出。
要检出新路径,只需执行以下命令:
$ git sparse-checkout set /path/to/check/out
此外,对于非常大的仓库,稀疏检出模式匹配列表会过于繁杂,Git 现在提供了一种 cone 模式,执行git config core.sparseCheckoutCone进入该模式,允许的模式匹配集将变得更加严格,可以直接指定是否在给定子目录内检出所有路径或所有文件,而不是通过 .gitignore 模式匹配。
例如,如果在大型存储库中有一个目录 A/B/C,而 C 是平时执行大部分工作的位置,则它可能需要被完全检出,但同时还需要让 A 和 B 检出足够多的内容,以便可以到达 C。在 cone 模式下, git sparse-checkout set A/B/C 可以做到这一点。
关于 Git 2.25 的更新内容,详情查看:
  • https://lore.kernel.org/git/xmqqtv4zjgv5.fsf@gitster-ct.c.googlers.com
  • https://github.blog/2020-01-13-highlights-from-git-2-25

-  ------- end --------  -

❤️ 看完两件事

如果你觉得这篇内容对你有所帮助,我想邀请你帮我两个小忙:

  • 点个「在看」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-)

  • 关注公众号「IT平头哥联盟」,一起进步,一起成长!



推荐阅读

2019前端大事件回顾(必读)~聊聊2020年大前端发展趋势一份你女朋友都能读懂的 Git 教程,还不赶紧学起来!解读Promise原理,手动实现一个Promise~
JavaScript的这个难点,这些年毁了多少程序员

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存